#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    cin >> s;
    int n = s.size();

    stack<int> st;
    vector<string> addL(n), addR(n); // 记录在某位置前/后加什么

    auto match = [](char l, char r) {
        return (l == '(' && r == ')') || (l == '[' && r == ']');
    };

    for (int i = 0; i < n; i++) {
        char c = s[i];
        if (c == '(' || c == '[') {
            st.push(i);
        } else { // c 是右括号
            if (!st.empty() && match(s[st.top()], c)) {
                st.pop(); // 匹配成功
            } else {
                // 在当前位置前补一个左括号
                if (c == ')') addL[i] = "(";
                else addL[i] = "[";
            }
        }
    }

    // 栈里剩下的左括号，要在它后补一个右括号
    while (!st.empty()) {
        int pos = st.top(); st.pop();
        if (s[pos] == '(') addR[pos] = ")";
        else addR[pos] = "]";
    }

    // 输出结果
    for (int i = 0; i < n; i++) {
        cout << addL[i] << s[i] << addR[i];
    }
    cout << "\n";

    return 0;
}
